package marketplace.web.beans;


import java.text.SimpleDateFormat;
import java.util.Date;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.servlet.http.HttpSession;

import marketplace.ejb.interfaces.IUsuarioEJB;
import marketplace.jpa.datas.DataCliente;
import marketplace.jpa.datas.Estado;
import marketplace.jpa.entities.Cliente;
import marketplace.jpa.entities.Usuario;
import marketplace.web.utils.UtilsBean;



@ManagedBean
@SessionScoped
public class ClienteBean {

	
	
	@EJB
	IUsuarioEJB cliente;
	
	
	private String nick;
	private String mail;
	private String nomCompleto;
	private String apellido;
	private String pass;
	private String movil;
	private char sexo;
	private Date fechaNto;
	private String cliEliminar;
	private String cliModificar;
	private String clienteBuscar;
	private String rutaImgagen;
	private String imagen;
	DataModel<DataCliente> clientesmodel; 
	

	public void setClientesmodel(DataModel<DataCliente> clientesmodel) {
		this.clientesmodel = clientesmodel;
	}

	
	//Obteniendo los clientes para listarlos
	public DataModel<DataCliente> getClientesModel() throws Exception{
		clientesmodel = new ListDataModel<DataCliente>(cliente.getListaClientes());
		return clientesmodel;	
	}
	
	public ClienteBean(){	}
	
	
	//Alta De Cliente
	public void postRegistroCliente() throws  Exception {

		boolean ok = false;
		String pass;
		UtilsBean ub = new UtilsBean();

		try {
			
			pass = ub.cryptMD5(getPass());
			
			if(getNick().isEmpty())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Ingrese su nick",""));
			else if(getNomCompleto().isEmpty())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Ingrese su nombre",""));
			else if(getMail().isEmpty())
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Ingrese su correo",""));
			else if(!ub.ValidarMail(mail))
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"El correo ingresado no es valido",""));
			else if (!cliente.validarLogin(getMail(), pass)) {
				
				DataCliente cli = new DataCliente();
				
				cli.setMail(getMail());
				cli.setNomCompleto(getNomCompleto());
				cli.setApellido(getApellido());
				cli.setMovil(getMovil());
				cli.setEstado(Estado.ACTIVO);
				cli.setPass(pass);
				cli.setSexo(getSexo());
				
				//Fecha
				SimpleDateFormat f =new SimpleDateFormat("dd/MM/yy");
		 		String formattedDate = f.format(getFechaNto());
				cli.setFechaNto(formattedDate);
				
				//Me obtengo de sesion la ruta de la imagen
/*				HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
				String imagen = (String) sesion.getAttribute("imagen");
*/
				//Guardo el nombre de la imagen subida para persistir el proveedor
/*				setImagen(imagen);*/			
				
				new UtilsBean().renombrarLogo(getMail());
				
				ok = cliente.guardarCliente(cli);

				if (ok) {
					FacesContext.getCurrentInstance().getExternalContext().redirect("/MarketWEB/market/index.xhtml");
				} else {
					FacesContext.getCurrentInstance().getExternalContext().redirect("/MarketWEB/market/error.xhtml");
				}
				
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha registrado", getNomCompleto() + "!, correctamente"));
				//FacesContext.getCurrentInstance().getExternalContext().redirect("/MarketWEB/admin/adminListar.xhtml");
			}else{
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"ERROR en el Registro: El mail, ya existe",""));
			}
		} catch (Exception e) {
			System.out.println("ERROR postRegistrarAdministrador: " + e.getMessage());;
		}	
		
	}
	
	
	//POST Logout
	public void logoutCliente() throws Exception {
	     FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
	     FacesContext.getCurrentInstance().getExternalContext().redirect("index.xhtml");
	}
	
	public void getClientes() throws Exception {
		FacesContext.getCurrentInstance().getExternalContext().redirect("listarClientes.xhtml");
	}
	
	public void getRegistroCliente() throws Exception {
		FacesContext.getCurrentInstance().getExternalContext().redirect("clienteRegistro.xhtml");
	}
	
	public void getEliminarCliente() throws Exception {
		cliente.eliminarCliente(getCliEliminar());
	}
	
	public void getModificarCliente() throws Exception {
		FacesContext.getCurrentInstance().getExternalContext().redirect("/MarketWEB/market/clienteModificar.xhtml");
	}
	
	public void modificarCliente() throws Exception {
		DataCliente cli = new DataCliente();
		
		cli.setMail(getMail());
		
		cli.setNick(getNick());
		cli.setNomCompleto(getNomCompleto());
		cli.setApellido(getApellido());
		cli.setMovil(getMovil());
		cli.setSexo(getSexo());
		
		SimpleDateFormat f =new SimpleDateFormat("dd/MM/yy");
 		String formattedDate = f.format(getFechaNto());
		cli.setFechaNto(formattedDate);
		
		//String pass;
		//UtilsBean ub = new UtilsBean();
		//pass = ub.cryptMD5(getPass());
		//cli.setPass(pass);
			
		new UtilsBean().renombrarLogo(getMail());
		
		cliente.modificarCliente(cli);
		
		FacesContext.getCurrentInstance().getExternalContext().redirect("/MarketWEB/market/index.xhtml");
		
	}
	
	public void buscarCliente(String mailC) throws Exception{
		setClienteBuscar(mailC);
		
		DataCliente aux = cliente.buscarCliente(getClienteBuscar());
		
		setNick(aux.getNick());
		setMail(aux.getMail());
		setNomCompleto(aux.getNomCompleto());
		setApellido(aux.getApellido());
		setSexo(aux.getSexo());
		setMovil(aux.getMovil());
		
		SimpleDateFormat df = new SimpleDateFormat("dd/MM/yy");
		java.util.Date d = df.parse(aux.getFechaNto());
		setFechaNto(d);
		
		this.getModificarCliente();
	}
	
	
	
	public void agregarWishlist(int idContenido) throws Exception{
		HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
		String email = (String) sesion.getAttribute("mailUsuario");
		if (!cliente.existeEnWishlist(email, idContenido)){
			cliente.agregarContenidoWishlist(email, idContenido);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Se ha ingresado el contenido digital a su wishlist!",""));
		}else{
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Ya existe el contenido en su Wishlist",""));			
		}
	}
	
	public void existeEnWishlist(int idContenido) throws Exception{
		HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
		String email = (String) sesion.getAttribute("mailUsuario");
		cliente.existeEnWishlist(email, idContenido);
	}
	
	
	
	
		
	
	
	////////////////////////////////// GETERS & SETERS ///////////////////////////////////////
	
	
	
	public String getNick() {
		return nick;
	}
	public void setNick(String nick) {
		this.nick = nick;
	}
	public String getMail() {
		return mail;
	}
	public void setMail(String mail) {
		this.mail = mail;
	}
	public String getNomCompleto() {
		return nomCompleto;
	}
	public void setNomCompleto(String nomCompleto) {
		this.nomCompleto = nomCompleto;
	}
	public String getApellido() {
		return apellido;
	}
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}	
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public String getMovil() {
		return movil;
	}
	public void setMovil(String movil) {
		this.movil = movil;
	}
	public char getSexo() {
		return sexo;
	}
	public void setSexo(char sexo) {
		this.sexo = sexo;
	}
	public String getCliEliminar() {
		return cliEliminar;
	}
	public void setCliEliminar(String cliEliminar) {
		this.cliEliminar = cliEliminar;
	}
	public String getCliModificar() {
		return cliModificar;
	}
	public void setIdCliModificar(String cliModificar) {
		this.cliModificar = cliModificar;
	}
	public String getClienteBuscar() {
		return clienteBuscar;
	}
	public void setClienteBuscar(String clienteBuscar) {
		this.clienteBuscar = clienteBuscar;
	}
	public Date getFechaNto() {
		return fechaNto;
	}
	public void setFechaNto(Date fechaNto) {
		this.fechaNto = fechaNto;
	}
	public String getRutaImgagen() {
		return rutaImgagen;
	}
	public void setRutaImgagen(String rutaImgagen) {
		this.rutaImgagen = rutaImgagen;
	}
	public String getImagen() {
		return imagen;
	}
	public void setImagen(String imagen) {
		this.imagen = imagen;
	}

}
